#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    udp_socket = new QUdpSocket(this);     //实例化对象
    udp_socket->bind(8080,QUdpSocket::ShareAddress|QAbstractSocket::ReuseAddressHint);
    setWindowTitle("服务器的端口号是：8080");
    //当服务器接受到连接信息时
    //当我们接收到数据的时候， 会触发一个信号
    //readyRead 信号   当对方给我们发数据的时候
    connect(udp_socket,&QUdpSocket::readyRead,this,
            &Widget::dealMsg);
    //参数一：  发送者
    //参数二：  发送的信号
    //参数三：  接收者
    //参数四：  连接的槽函数
    //参数五：  连接方式
    // 在QWidget的构造函数或初始化函数中
    QPalette pal = this->palette();
    pal.setBrush(QPalette::Background,QBrush(QPixmap(":/images/room.png")));
    setPalette(pal);

}

void Widget::dealMsg(){
    //char buff[1024]={0};
    QByteArray buff;          //接收数据的类型
    QHostAddress client_Addr;  //主机地址
    quint16 port;              //端口号
    buff.resize(udp_socket->pendingDatagramSize());
    qint64 len = udp_socket->readDatagram(buff.data(),buff.size(),&client_Addr,&port);
    //udp  接收数据 调用 readDatagram
    qDebug()<< buff;
    QString s ;   //保存字符串
    s = QVariant(buff).toString();     //把他转换成String类型
    if(len>0){
        QString str = QString("[%1:%2 %3]").
                arg(client_Addr.toString()).
                arg(port).
                arg(QString::fromLocal8Bit(buff));
        ui->textEdit->setText(str);   //textEdit 控件里面显示出来？
        //ht,28.9,30.0
        //list[0] = "ht"
        //list[1] = "28.9"
        //list[2] = "30.0"
        QStringList list = s.split(",");          //把字符串 以,分开
        if(s.startsWith("TH"))
        {
               ui->pBar_temp->setValue(list[1].toDouble());
               ui->pBar_hump->setValue(list[2].toDouble());
        }
        if(s.startsWith(("light")))
        {
            ui->pBar_light->setValue(list[1].toDouble());
        }
    }

}
Widget::~Widget()
{
    delete ui;
}
//写文本
void Widget::on_send_bt_clicked()
{
    QString ip = ui->IP_lineEdit->text();
    qint16 port = ui->port_lineEdit_2->text().toInt();
    QString array = ui->textEdit->toPlainText();
    udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
    //udp  发送数据 调用 wrtieDatagram
    //发送的时候要写对方的 Ip  和 端口号
}

void Widget::on_pB_Led_clicked()
{
    if(led2Flag){
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "LED2OFF";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        led2Flag = false;
        ui->pB_Led->setStyleSheet("border-image: url(:/images/bulb_off.png);");
    }
    else
    {
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "LED2ON";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        led2Flag = true;
        //跟我们右键是一样的
        ui->pB_Led->setStyleSheet("border-image: url(:/images/bulb_on.png);");
    }
}
void Widget::on_pB_Fan_clicked()
{
    if(fanFlag){
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "FANOFF";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        fanFlag = false;
        ui->pB_Fan->setStyleSheet("border-image: url(:/images/fan_off.png);");
    }
    else
    {
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "FANON";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        fanFlag = true;
        //跟我们右键是一样的
        ui->pB_Fan->setStyleSheet("border-image: url(:/images/fan_on.png);");
    }
}

void Widget::on_pB_relay_clicked()
{
    if(relayFlag){
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "RELAYOFF";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        relayFlag = false;
        ui->pB_relay->setStyleSheet("border-image: url(:/images/buttonsred.png);");
    }
    else
    {
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "RELAYON";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        relayFlag = true;
        //跟我们右键是一样的
        ui->pB_relay->setStyleSheet("border-image: url(:/images/buttonsgreen.png);");
    }
}

void Widget::on_pushButton_2_clicked()
{
    this->close();
}

void Widget::on_pB_Beep_clicked()
{
    if(relayFlag){
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "BEEPOFF";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        relayFlag = false;
        ui->pB_relay->setStyleSheet("border-image: url(:/images/buttonsred.png);");
    }
    else
    {
        QString ip = ui->IP_lineEdit->text();     //获取输入框里面的 Ip
        qint16 port = ui->port_lineEdit_2->text().toInt();   //获取输入框里面的端口号
        QString array = "BEEPON";
        udp_socket->writeDatagram(array.toLocal8Bit(),QHostAddress(ip),port);
        relayFlag = true;
        //跟我们右键是一样的
        ui->pB_relay->setStyleSheet("border-image: url(:/images/buttonsgreen.png);");
    }
}
